//
//  CZHomeTableViewController.swift
//  Blog
//
//  Created by whitcast on 16/7/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD
//  重用标记
private let HomeTableViewCellIdentifier = "HomeTableViewCellIdentifier"
class CZHomeTableViewController: CZVisitorTableViewController {
    //  懒加载ViewModel对象
    private lazy var statusListViewModel: CZStatusListViewModel = CZStatusListViewModel()
    // MARK: 懒加载控件
    private lazy var pullUpView: UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicatorView.color = UIColor.redColor()
        return indicatorView
    }()
    // 使用自定义下拉刷新
    private lazy var pullDownView: CZRefreshControl = {
       let ctr = CZRefreshControl()
        // 添加下拉刷新
        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)

        return ctr
    }()
    
    // tipLabel
    private lazy var tipLabel: UILabel = {
        let label = UILabel(textColor: UIColor.whiteColor(), fontSize: 12)
        label.backgroundColor = UIColor.orangeColor()
        label.textAlignment = .Center
        // 默认情况下隐藏
        label.hidden = true
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if isLogin {
            setupUI()
            // 设置tableview相关操作 注册cell
            setupTableView()
            // 登录
            loadStatus()
        }else {
            visitorView?.updateVisitorInfo(nil, imageName: nil)
        }
    }
    private func setupUI() {
        guard let nav = self.navigationController else {
            return
        }
        nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
        tipLabel.frame = CGRect(x: 0, y: 64-30, width: nav.navigationBar.width, height: 30)
    }
    
    // MARK: -- 开启tip动画
    private func startAnimation(message:String) {
        //  如果在执行动画,则不需要再次执行,通过是否显示这个label可以知道是否在执行动画
        if tipLabel.hidden == false {
            return
        }
        // 显示tipLabel
        tipLabel.hidden = false
        tipLabel.text = message
        UIView.animateWithDuration(1, animations: { () -> Void in
             self.tipLabel.transform = CGAffineTransformMakeTranslation(0, self.tipLabel.height)
            }) { (_) -> Void in
                UIView.animateWithDuration(1, animations: { () -> Void in
                    self.tipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        // 动画执行完成以后隐藏tiplabel
                        self.tipLabel.hidden = true
                })
        }
    }
    
     //  设置tableview相关操作
    private func setupTableView() {
        tableView.registerClass(CZStatusTableViewCell.self, forCellReuseIdentifier: HomeTableViewCellIdentifier)
        //  去掉分隔线
        tableView.separatorStyle = .None
        // 设置自动行高，通过约束设置高度
        tableView.rowHeight = UITableViewAutomaticDimension
        // 预估行高越接近真实高度越好
        tableView.estimatedRowHeight = 200
        
        // 添加下拉刷新
        tableView.addSubview(pullDownView)
        
        // 添加footView
        tableView.tableFooterView = pullUpView
        // 指定大小
        pullUpView.sizeToFit()
        
    }
    // 下拉刷新
    private func pullDownRefresh() {
        // 加载下来刷新数据
        loadStatus()
    }
    
    
    //  结束刷新
    private func endRefreshing() {
        //  停止动画
        pullUpView.stopAnimating()
        //  结束系统的下拉刷新
        //pullDownView.endRefreshing()
    }

    
    //加载微博数据
    private func loadStatus() {
        statusListViewModel.loadStatus(pullUpView.isAnimating()) { (isSuccess, message) -> () in
            if !self.pullUpView.isAnimating() {
                //  开启tip动画
                self.startAnimation(message)
            }

            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
    }

}

extension CZHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellIdentifier, forIndexPath: indexPath) as! CZStatusTableViewCell
        // 设置没有选中的颜色
        cell.selectionStyle = .None
        let statusViewModel = statusListViewModel.statusList[indexPath.row]
        // 设置需要的ViewModel
        cell.statusViewModel = statusViewModel
        
        return cell
        
        
        
    }
    // 将要显示那个cell
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        // 判断是否是最后一个cell
        if indexPath.row == statusListViewModel.statusList.count - 1 && pullUpView.isAnimating() {
        
            // 开启加载圆圈
            pullUpView.startAnimating()
            print("已经滚动到最后一个cell了")
            loadStatus()
            
        }
    }
}



